image.png

Elegibilidad de un Paciente para Ensayos Clinicos de Cancer

1. Contexto

Los ensayos clínicos de cáncer intervencionista suelen ser demasiado restrictivos, y algunos pacientes suelen ser excluidos en función de la comorbilidad, los tratamientos previos o concomitantes, o el hecho de que son mayores de cierta edad. La eficacia y seguridad de nuevos tratamientos para pacientes de estas características no están, por tanto, definidas. En este trabajo, construimos un modelo para predecir automáticamente si las declaraciones clínicas breves se consideraron criterios de inclusión o exclusión. Usamos protocolos de ensayos clínicos de cáncer que estaban disponibles en https://www.kaggle.com/datasets/auriml/eligibilityforcancerclinicaltrials

2. Contenido

De acuerdo con la fuente de donde se extrajeron los datos (Kaggle), se extrajo un total de 6 186 572 declaraciones clínicas etiquetadas de 49 201 protocolos de TC intervencionistas sobre el cáncer (la URL para descargar este conjunto de datos está disponible gratuitamente en https://clinicaltrials.gov/ct2/results?term=neoplasmtype=Intrshowdow). Cada CT descargado es un archivo XML que sigue una estructura de campos definida por un esquema XML de ensayos clínicos. Los datos relevantes para este proyecto se derivan de los campos de intervención, condición y elegibilidad escritos en lenguaje de texto libre no estructurado.

Sin embargo, los datos con los que se cuentan para este proyecto son 12000, cada uno dividido en dos columnas:

3. Comprension del Negocio y Enfoque Analitico

Una vez entendidos los datos y el contexto del problema, se plantea que el objetivo que se esta buscando con el analisis de Machine Learning, es determinar la elegibilidad de un paciente para ensayos clínicos de cáncer a partir del texto descriptivo, esto se debe a que se busca optimizar y acompañar el programa de selección de los pacientes, de forma que se ayude a determinar ciertos criterios que ayuden a definir la eficacia y seguridad de nuevos tratamientos para pacientes de estas características.

Por lo tanto, se plantea que este es un problema de aprendizaje supervisado y de clasificacion. Esto se debe a que ya de por si los datos están etiquetados, lo que permite hacer el entrenamiento más fácil y eficiente, y por el otro lado, es un problema de clasificación binaria, pues vamos a definir si es el paciente es elegible o no.

4. Perfilamiento y Entendimiento de los Datos

A continuacion, se hace una carga inicial de los datos, y se hace un análisis de la calidad de los datos.

4.1. Carga de los datos

4.2. Indentificacion de Datos Nulos

Como se puede ver a continuacion, de los 12000 datos que hay, no hay ningun valor nulo en ninguna de las dos columnas.

4.3. Division de los datos en las columnas Study y Cancer_Type

Como los datos poseen informacion separada por un punto, se va a hacer una division de estos datos, para tener un poco mas de granularidad al momento de trabajar el problema.

Ahora se acomodara la columna label, de forma que solo sea o 0 o 1.

4.4. Analisis de los Casos de estudio

Como se puede ver a continuacion, se pueden hacer diferentes agrupaciones segun el estudio de cada caso, donde por ejemplo, 'study interventions are Antibodies, Monoclonal', es el que es mas comun. Adicionalmente, a continuacion se muestra como es la distribucion de las diferentes etiquetas para los 100 primeros casos de estudio.

4.5. Identificacion de Palabras Clave

Ahora bien, si queremos entender e identificar algunas palabras clave importantes, se puede separar el texto que se tiene en la columna cancer_type en un arreglo, y de aqui hacer un conteo de las palabras y seleccionar las palabras posiblemente mas importantes o relevantes para el caso actual.

Como podemos ver, la mayoria de las palabras arriba no son de utilidad, puesto que palabras como 'and', 'or' o 'the', son palabras que se pueden repetir en todos los casos, y que por lo tanto no nos brindan informacion especial para el caso actual.

A continuacion, se hace un primer filtro de estas palabras no utiles haciendo uso de una libreria llamada nltk, que tiene unas stopwords, que son precisamente las palabras que buscamos eliminar. Por lo tanto, se crea una nueva columna llamada filtered_words sin este tipo de palabras.

A continuacion se vuelve a hacer un conteo de las palabras que no fueron eliminadas.

4.6. Analisis desde los tipos de Cancer

Ahora bien, un análisis adicional que se le puede hacer a los datos es por ejemplo si se le hace una división por el tipo de cancer que el paciente tiene. Por ejemplo, tomemos dos casos: cuando el paciente tiene cancer en la linfa o de seno.

Palabras para clintrial_lymphoma

Palabras para clintrial_breast

Ahora bien, podemos ver entonces la influencia de diferentes palabras que podrian ser claves para el analisis los dos diferentes tipos, por ejemplo palabras como: recurrent, stage ii, stage iii, stage iv, follicular, diffuse o hodgkin.

A continuacion se muestran algunos resultados y analisis del tipo de cancer de lymphoma:

A continuacion se muestran algunos resultados y analisis del tipo de cancer de seno:

5. Preprocesamiento de los datos y toma de decisiones de acuerdo al negocio

A continuacion se hace un tratamiento de los datos (preparación o transformaciones requeridas), sobre la base del conocimiento del dominio y de los algoritmos seleccionados para resolver las tareas.

Para poder realizar el pre-procesamiento de los datos, es recomendable pasar por tres etapas:

5.1. Limpieza de los datos.

Anteriormente en la parte de analisis ya se hizo una parte de limpieza, sin embargo, se usaran los siguientes metodos, por si algun valor especifico o algo se paso de la limpieza anterior.

5.2 Tokenización

La tokenización permite dividir frases u oraciones en palabras. Con el fin de desglozar las palabras correctamente para el posterior análisis. Pero primero, se realiza una corrección de las contracciones que pueden estar presentes en los textos, y luego se aplican los metodos de limpieza desarrollados anteriormente.

5.3. Normalización

En la normalización de los datos se realiza la eliminación de prefijos y sufijos, además de realizar una lemmatización.

5.4. Division de los Datos

Ahora bien, se hara una division de los datos, dejando 3 opciones diferentes para los datos en $X$, esto se debe a que como hay una division entre la informacion sobre el estudio y la informacion sobre el tipo de cancer. Por lo tanto para separar los datos se dejaron 3 opciones de trabajo para utilizar en los modelos:

6. Modelado y evaluación

A continuacion se hace la aplicación de tres algoritmos diferentes para la tarea de aprendizaje de máquina seleccionada. En esta parte se van describir los algoritmos utilizados, haciendo una justificacion del porque se uso cada uno de estos modelos, asi como se describira el algoritmo para la construcción de los modelos y se hara una presentación de los resultados de la evaluación cuantitativa.

6.1. Arboles de Clasificacion

6.1.1. Entendimiento del Algoritmo

Los arboles de decision, son uno de los algoritmos de aprendizaje supervisado más utilizados en machine learning y pueden realizar tareas de clasificación o regresión. En este sentido, los arboles de decisión son representaciones gráficas de posibles soluciones a una decisión basadas en ciertas condiciones.

Para obtener el árbol óptimo y valorar cada subdivisión entre todos los árboles posibles y conseguir el nodo raiz y los subsiguientes, el algoritmo deberá medir de alguna manera las predicciones logradas y valorarlas para comparar de entre todas y obtener la mejor. Para medir y valorar, utiliza diversas funciones, siendo las más conocidas y usadas los “Indice gini” y “Ganancia de información” que utiliza la denominada “entropía“. La división de nodos continuará hasta que lleguemos a la profundidad máxima posible del árbol ó se limiten los nodos a una cantidad mínima de muestras en cada hoja

Teniendo en cuenta lo anterior, este algoritmo se escogió, pues es ayuda a definir las caracteristicas mas importantes al momento de hacer la predicción, en este sentido, se va a usar el arbol de clasificación para poder entender que palabras son posiblemente las más relevantes al momento de tomar una decisión si el paciente es elegible o no.

6.1.2. Entrenamiento del modelo

Ahora bien, para lograr el objetivo anteriormente mencionado, se van a utilizar los datos de los datos en conjunto, y se intentara hacer un analisis de las palabras clave mas importantes, para la realizacion del modelo de prediccion.

Primero, se hace la division de los datos entre datos de entrenamiento y datos de test.

Ahora bien, para lograr el objetivo anteriormente mencionado, haciendo uso de una validacion cruzada, que divide en k particiones disjuntas el conjunto de datos de entrenamiento. Luego, se fija un valor de hiperparámetro y se toma como conjunto de validación la primera partición y el resto para entrenar el modelo. Este proceso se repite para cada partición. Al finalizar, se determina el valor promedio de las métricas seleccionadas. Este ciclo se repite sobre diferentes valores del hiperparámetro y se seleccionan aquel que ofrezcan el mejor rendimiento.

Scikit-learn ofrece algunos métodos que automatizan el proceso de buscar los valores de los hiperparámetros. Uno de ellos es GridSearchCV, el cual se basa en la validación cruzada de k-particiones. Por lo tanto, a continuacion, se hace uso de este algoritmo, en funcion de encontrar los mejores hiperparametros para la construccion de nuestro arbol de deciion

6.1.2. Conclusiones del Modelo

Como se pudo observar en la parte anterior, el mejor modelo encontrado haciendo uso de los arboles de decisión es:

mejor_modelo={'criterion': 'gini', 'max_depth': 6, 'min_samples_split': 5}

Es decir, un modelo que haga uso del citerio de gini, tenga una profundidad maxima de 6 y el minimo numero de ejemplos sea 5. A continuacion, se hara un analisis haciendo uso de las matrices de confusion, de dibujar el arbol y de la clasificacion de las caracteristicas mas importantes sobre el modelo.

Como se puede observar, la clasificacion es buena, pues tiene una exactitud de 0.62. En cuanto a la precision de la clasificacion de cada una de las clases se puede decir que el modelo lo hace correctamente para los datos de entrenamiento para la clase 1, pero no tan bien para la clase 0, pues la precision es de 0.59 y 0.88, respectivamente. Es decir que los datos que clasifica como verdaderos positivos respecto a el total de datos que clasifica como positivos es bastante bueno para los papcientes que no son elegibles, y no tanto para aquellos que no lo son. Adicionalmente la sensibilidad de aquellos datos que clasifica como verdaderos con respecto al total que son verdaderos, es buena para la clase 0 (pacientes elegidos), pero no para la clase 1 (pacientes no elegidos) pues el recall que mide esta sensibilidad es alto, aqui se puede ver que principalmente para la clase 1 hacer mejor el trabajo. De igual forma, la exactitud general del modelo (0.93) es buena.

Sin embargo, los datos que mas nos interesa ver como se maneja el modelo son los datos de prueba, pues queremos ver que el modelo funcione aun cuando no conoce los datos con anterioridad, esto se muestra a continuacion.

Como se puede observar, aqui la clasificacion tambien es buena, pues tiene una exactitud 0.61. En cuanto a la precision de la clasificacion de cada una de las clases se puede decir que el modelo lo hace correctamente para los datos de la clase 1, sin embargo no clasifica tan bien los datos de la clase 0. Esto quiere decir que, los datos que clasifica como verdaderos positivos respecto a el total de datos que clasifica como positivos es bastante bueno para la clase 1 (pacientes no elegidos). Adicionalmente la sensibilidad de aquellos datos que clasifica como verdaderos con respecto al total que son verdaderos, es muy buena tambien para la clase 0, pues tiene un recall de 0.92, pero para la clase 1 lo hace no muy bien (0.28).

Ahora bien, observemos el arbol final que construye el modelo:

Ahora bien, en cuanto a esto ultimo, se puede observar que no hay palabras fundamentalmente importantes, pues las que aparecen como palabras mas determinantes no son fundamentales para la caracterizacion del cancer.

6.2. K-Nearest Neighbors

6.2.1 Entendiendo el Algortimo

El algoritmo de KNN es uno de clasificación supervisada, el cual se usa para para estimar la probabilidad que tiene un elemento de pertenecer a cierta clase según sus caracteristicas dadas. En el reconocimiento de patrones, este algortimo es usado como un método de clasificación basado en entrenamiento mediante ejemplos ceranos al espacio de elementos.

En este sentido, las ventajas que tiene este algoritmo, y que por lo tanto, se pensó en utilizar son:

En este caso, vamos a identificar si es posible encontrar un modelo preciso de predicción de clasificación que se construya a partir de encontrar los vecinos mas cercanos.

6.2.2 Entrenamiento del modelo

Con el fin de determinar la probabilidad que tiene un nuevo paciente de ser elegible o no, se decidió trabajar sobre el conjunto de los datos en conjunto, con el fin de tener una estimación más acertada.

Se hace la división de los datos en conjunto de entrenamiento y conjunto de prueba

Una vez realizada la partición de los datos, se procede a hacer el cálculo de los hiperparametros del algortimo con el fin de tener el mejor modelo posible para el problema, para esto se define un espacio de busqueda para $k$ entre 1 y 11, y posteriormente, con ayuda de GridSearchCV, se define cual es el mejor modelo.

Una vez hecha la busqueda, se encontro que el mejor modelo es:

mejor_modelo={'n_neighbors': 1, 'p': 1}

Sin embargo, como nos pudimos dar cuenta, el modelo tiene un sobreajuste, pues da una exactitud completa para los datos de entrenamiento, por lo tanto, se van a ver otras opciones del algoritmo para ver como se comporta.

6.2.3. Probando otros modelos

Con el fin de ilustrar otras opciones del modelo, que no fueron encontradas optimas por la busqueda con GridSearchCV, se muestran a continuación dos opciones usando diferentes valores de $k$

6.2.3.1. Para k = 2
6.2.3.2. Para k = 5

6.2.4. Conclusion del modelo

Una vez realizado el calculo de los hiperparámetros, y la revision de otros modelos, vemos que a pesar que hay un sobreajuste el mejor modelo sigue siendo el encontrado por el gridserach, pues es el que da mejores resultados para los datos nuevos (de prueba), entonces vemos que el mejor módelo es el que tiene los siguientes parametros:

mejor_modelo={'n_neighbors': 1, 'p': 1}

Lo que quiere decir que se basa en los x vecinos más cercanos para determinar el grupo al que pertenece un elemento.

Al aplicar el modelo encontrado sobre el conjunto de datos de entrenamiento y de prueba se obtienen los siguientes resultados:

Duepués de entrear el modelo y establecer los mejores hiperparamétros del mismo, vemos que este tiene una exactitud sobre el conjunto de datos de entrenamiento de practicamente el 100%, lo que indica que el modelo

Después de entrear el modelo y establecer los mejores hiperparamétros del mismo, vemos que este tiene una exactitud sobre el conjunto de datos de entrenamiento de practicamente el 100%, lo que indica que el modelo aprendió casi a la perfección el conjunto de datos sobre el que fue entrenado. Una vez se tiene entrenado el modelo, se procede a probarlo con la partición de los datos correspondiente, en general, se tiene una exactitud aceptable del 70%. Sin embargo, como se ve en la matriz mostrada anteriormente, la mayor parte de los datos predecidos erroneamente son lo que se consideran falsos-positivos, teniendo que la mayor parte de estos errores dan como elegibles a pacientes que en realidad no lo son.

6.3. Support Vector Machines

Se puede utilizar una SVM siempre y cuando se tengan exactamente dos clases. En esta situación se observan estas dos clases en la forma de "incluido" y "excluido", por lo que es ideal. Una SVM funciona de tal manera que encuentra el mejor "hiper-plano" que separa todos los datos que pertenecen a una clase de todos aquellos que no. Funciona por medio de vectores, por lo que es necesario transformar los datos en texto a valores de este tipo. En especifico para problemas con texto, que tienen una gran cantidad de rasgos diferentes, es recomendable utilizar una SVM de kernel lineal, lo que quiere decir que el hiper-plano que se utilizará para separar los datos es una línea recta.

Las ventajas de utilizar una SVM lineal incluyen la velocidad de entrenamiento y el hecho de que el único parámetro que se debe optimizar es la C-regularización. Además, cuando se comparan con otros algoritmos de clasificación, como redes neuronales, tienden a ser más rápidos y a tener mejores resultados cuando la cantidad de datos es relativamente pequeña (No pasa de los 20,000). Teniendo en cuenta que se está trabajando con 12,000 datos, una SVM lineal podría ser la forma ideal de clasificación para este problema.

Se comienza por revisar las tres opciones de datos dispobibles con diferentes valores de C, para encontrar tanto la opción correcta de datos para utilizar como el mejor valor de C para esta. Para esto, le damos mayor prioridad a un recall alto que a una precisión alta, por lo que calculamos el valor f beta con un valor de beta igual a 2, y se encuentra el mayor valor de cada lista creada, escogiendose el mayor entre estos dos como el mejor modelo posible.

De los hiperparámetros que se pueden cambiar para una SVM en sklearn.svm.LinearSVC, el único que tienen un efecto en nuestro problema es la C-regularización. Teniendo este hecho en cuenta, se llevó a cabo un experimento para encontrar el mejor valor de C posible para los datos que se tienen. Para entender cuál es el mejor valor para la C-regularización, es necesario entender lo que este hiperparámetro es en general, por lo que se dará una corta explicación a continuación.

C-regularización}

En una SVM se intenta encontrar dos cosas: un hiper-plano que separe instancias de la forma más correcta posible, y un hiper-plano con el más alto margen mínimo posible. Estos dos factores, sin embargo, no siempre van de la mano, y por esta razón existe la C-regularización. Esta le indica al algoritmo que tan importante es obtener las instancias de la forma más correcta posible, en comparación con la importancia del margen. Entre mayor sea el valor de C, más importancia se le dará a clasificar las instancias de la forma más correcta posible.

Hay casos en los que clasificar las instancias de la forma más correcta posible puede ser contraproducente, reduciendo la posibilidad de que nuevos datos sean clasificados correctamente si no son extremadamente parecidos a los datos que se han obtenido anteriormente. Esto quiere decir que un C alto es ideal si se espera que los valores nuevos sean muy similares a los que ya se han obtenido, mientras que un C bajo es ideal si se espera obtener nuevos datos que no sean extremadamente similares a los ya obtenidos pero que requieran ser clasificados junto con ellos.

Para este caso especifico, la métrica principal a utilizar será el recall que se consiga con cada valor de C, ya que este nos ayuda a asegurar que pacientes que clasifican para el tratamiento lo obtengan, hasta si esto quiere decir que algunos que no clasifican pasan también. Esta forma de medición indica que se puede esperar que un valor bajo de C-regularización sea el indicado. De forma secundaria, también se busca un valor lo más alto posible de precisión, ya que también es importante asegurar que los pacientes incluidos no hagan parte del grupo que debía ser excluido.\\

Teniendo en cuenta los factores anteriormente mencionados, se llevó a cabo un procedimiento de optimización del valor de C, buscando maximizar el valor de f-$\beta$, donde beta tiene un valor de 2, para conseguir así el modelo que mejor cumpla con las expectativas del negocio. También se llevó a cabo el procedimiento tres veces distintas, una con los datos del cáncer, una con los datos del estudio, y una con todos los datos, para así escoger la opción adecuada.

De esta información se obtiene que el mejor modelo es un SVC lineal con un valor de C igual a 1, y que utiliza los datos del cancer exclusivamente, aunque los datos de tanto el cancer como el estudio también se podrían utilizar. Para el modelo elegido, se revisan también los valores especificos de precisión y recall, además de crearse la matriz de confusión, a continuación.

Estos valores nos demuestran que la mejor opción para SVM es utilizar los datos exclusivamente del cáncer, aunque utilizar ambos datos tiene un valor casi igual. Al buscar cuál valor de C obtuvo el mayor resultado de f-$\beta$, se descubre que este pasa cuando C=1, lo que concuerda con la hipótesis inicial de que el valor sería bajo para reducir la posibilidad de que personas que cumplan con los prerrequisitos para obtener tratamiento no lo obtengan, inclusive si unas pocas más de las que no cumplen terminen obteniéndolo.

6.4. Logistic Regression

La regresión logística es uno de los algoritmos de aprendizaje automático más simples y comúnmente utilizados para la clasificación de dos clases. Es fácil de implementar y se puede utilizar como base para cualquier problema de clasificación binaria.

La regresión logística es un método estadístico para predecir clases binarias. La variable de resultado o objetivo es de naturaleza dicotómica. Dicotómico significa que solo hay dos clases posibles. Es un caso especial de regresión lineal donde la variable objetivo es de naturaleza categórica. Utiliza un registro de probabilidades como variable dependiente. La regresión logística predice la probabilidad de ocurrencia de un evento binario utilizando una función sigmoide.

Para esto, sabemos que la Regresión logística es util pues, comparado con la regresión lineal, que brinda una salida continua, la regresión logística proporciona una salida constante, y para este caso, necesitamos hacer un modelo predictivo que determine si un pacientes es o no elegible para el tratamiento de cancer especifico.

6.4.1. Modelo Ingenuo

A continuación se usan todos los datos, y se hace una primera predicción de un modelo ingenuo.

6.4.2. Busqueda de hiperparametros

Con la información anterior, nos podemos dar cuenta que la regresión logística es un modelo que nos puede dar resultados con mejor exactitud que los modelos anteriores, por lo tanto, para generar un mejor modelo, se porpone hacer una búsqueda de los mejores hiperparámetros, para así poder encontrar el mejor modelo de regresión logística.

6.4.3. Evaluación del modelo

Con este resultado, se encontró que el mejor modelo es:

LogisticRegression('C': 0.1, 'penalty': 'l2', 'solver': 'liblinear')

Ahora bien, se mirarán los resultados entonces de la matriz de confusión, para poder hacer un mejor análisis del modelo.

Como se puede observar, la regresión es buena, pues tiene una exactitud de 0.86. En cuanto a la precision de la regresión de cada una de las clases se puede decir que el modelo lo hace correctamente para los datos de entrenamiento para las dos clases, pues la precision es de 0.86 y 0.87, respectivamente. Es decir que los datos que clasifica como verdaderos positivos respecto a el total de datos que clasifica como positivos es bastante bueno para los papcientes que no son elegibles, y para aquellos que lo son. Adicionalmente la sensibilidad de aquellos datos que clasifica como verdaderos con respecto al total que son verdaderos es buena para ambas clases, pues tiene un recall de 0.86 en ambas..

Sin embargo, los datos que mas nos interesa ver es como se maneja el modelo son los datos de prueba, pues queremos ver que el modelo funcione aun cuando no conoce los datos con anterioridad, esto se muestra a continuacion.

Como se puede observar, la regresión es buena, pues tiene una exactitud de 0.79, y es de hecho la mejor entre todos los modelos realizados. En cuanto a la precision de la regresión de cada una de las clases se puede decir que el modelo lo hace correctamente para los datos de entrenamiento para las dos clases, pues la precision es de 0.80 y 0.78, ligeramente mejor para la clase 0 que para la 1. Es decir que los datos que clasifica como verdaderos positivos respecto a el total de datos que clasifica como positivos es bastante bueno para los papcientes que no son elegibles, y para aquellos que lo son. Adicionalmente la sensibilidad de aquellos datos que clasifica como verdaderos con respecto al total que son verdaderos es buena para ambas clases, pues tiene un recall de 0.78 y 0.79, respectivamente.

7. Resultados

image.png

8. Conclusiones